home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / fun / world.4 < prev    next >
Text File  |  1989-02-02  |  50KB  |  1,736 lines

  1. Path: xanth!nic.MR.NET!csd4.milw.wisc.edu!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i011:  world - text adventure, Part04/07
  5. Message-ID: <11527@swan.ulowell.edu>
  6. Date: 2 Feb 89 05:04:23 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 1725
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: ejkst@unix.cis.pittsburgh.edu (Eric J. Kennedy)
  12. Posting-number: Volume 89, Issue 11
  13. Archive-name: fun/world.4
  14.  
  15. #    This is a shell archive.
  16. #    Remove everything above and including the cut line.
  17. #    Then run the rest of the file through sh.
  18. #----cut here-----cut here-----cut here-----cut here----#
  19. #!/bin/sh
  20. # shar:    Shell Archiver
  21. #    Run the following text with /bin/sh to create:
  22. #    parser.c
  23. #    vtext.dat.ac
  24. # This archive created: Mon Jan 30 18:06:39 1989
  25. cat << \SHAR_EOF > parser.c
  26. #include "parame.inc"
  27. #include "variab.h"
  28. #include "arrays.h"
  29. #include "vocab.inc"
  30. #include "verbtb.inc"
  31. #define abs(A) ((A < 0) ? -A : A)
  32.  
  33. /* World C Version 1.00 copyright 1987 J.D.McDonald 
  34.    Use as you like for non-commercial purposes, but please
  35.    leave this note, and document any changes you make as yours */
  36.  
  37. /* No apologies for all the goto's. If you can get rid of them, well,
  38.    I guess some persons are just naturally masochists */
  39.  
  40. static int      typlst[4] = {VRBMIN, ADJMIN, NUNMIN, PRPMIN};
  41. static int      index[5], indx;
  42.  
  43. scan()
  44. /*
  45.  * this function scans the input line for gross syntax errors it also expands
  46.  * special direction commands such as "ne" into their full form. it also
  47.  * works on adverbs, removes such expressions as "ask frog," etc. finally it
  48.  * puts the word numbers and types in the wrdnum and wrdtyp arrays the input
  49.  * is inbuf ,the output is wrdnum,wrdtyp,actor,adverb 
  50.  *
  51.  */
  52. {
  53.     int             result, offlg, askx, lptr0, wptr, i, lxx, errno;
  54.  
  55.     result = 0;
  56.     offlg = 0;
  57.     chgact = 0;
  58.     askx = 0;
  59.  
  60. lab5:
  61.     adverb = 0;
  62.     for (i = 0; i < 30; i++) {
  63.     wrdnum[i] = 0;
  64.     wrdtyp[i] = 0;
  65.     }
  66.     /*
  67.      * wordtyp is -1 for a period,-2 comma 1 for adverb,2 verb,3 adjective,4
  68.      * noun,5 preposition numbers are type 4,and wrdnum=number+10000 
  69.      */
  70.  
  71.     wptr = 0;
  72. lab10:
  73.     lptr0 = lptr;
  74.     wscan();
  75.     /*
  76.      * on return from wscan punct contains: 0 for a word 1 for a period 2 for
  77.      * a comma 3 for a number 4 if an illegal character 5 if a number follows
  78.      * a letter directly 6 if a letter follows a number directly 
  79.      */
  80.  
  81.     if (punct == 1)
  82.     return (result);
  83.     else if (punct == 4)
  84.     goto lab9000;
  85.     else if (punct == 2)
  86.     goto lab9010;
  87.     else if (punct == 3)
  88.     goto lab9019;
  89.     else if (punct == 5)
  90.     goto lab9020;
  91.     else if (punct == 6)
  92.     goto lab9140;
  93.     else;
  94.     /* it's a real word, so find out what it is */
  95.  
  96.     find(VOCMAX);
  97.  
  98.     /* discard buzzword  */
  99.  
  100.     if (indx > 0 && indx <= BUZMAX)
  101.     goto lab10;
  102.     if (indx == 0)
  103.     goto lab9040;
  104.  
  105.     if ((indx >= NORTH && indx <= NORTHW) || indx == UP
  106.     || indx == DOWN) {
  107.     /* yes,it's a special word  */
  108.  
  109.     lptr0 = lptr;
  110.     wscan();
  111.     /* check if it's all that's on the line  */
  112.  
  113.     if (punct != 1)
  114.         goto lab9030;
  115.     /* expand a direction word into full form */
  116.  
  117.     wrdtyp[1] = 4;
  118.     wrdnum[1] = indx;
  119.     wrdnum[0] = GO;
  120.     wrdtyp[0] = 2;
  121.     wrdtyp[2] = -1;
  122.     goto lab9999;
  123.     }
  124.     if (index[0] != 0) {
  125.     if (adverb != 0)
  126.         goto lab9070;
  127.     /* adverbs are removed from the wrdtyp list and handled separately */
  128.  
  129.     adverb = index[0];
  130.     if (adverb != WHERE && adverb != WHAT)
  131.         goto lab10;
  132.     if (actor == 1 || askx != ASK)
  133.         goto lab9130;
  134.     goto lab10;
  135.     }
  136.     if (index[1] == 0)
  137.     goto lab9050;
  138.     wrdtyp[wptr] = 2;
  139.     wrdnum[wptr] = index[1];
  140.     /*
  141.      * we've found the verb check for legal question  
  142.      */
  143.  
  144.     if ((adverb == WHAT || adverb == WHERE) - (wrdnum[0] == IS))
  145.     goto lab9130;
  146.     if (wrdnum[0] == YELL) {
  147.     /* the player is told to use "ask" or "tell" */
  148.  
  149. lab131:
  150.     wscan();
  151.     if (punct != 1)
  152.         goto lab131;
  153.     wrdtyp[0] = 2;
  154.     wrdnum[0] = YELL;
  155.     result = 1;
  156.     return (result);
  157.     }
  158.     if (wrdnum[0] < SHIT)
  159.     goto lab200;
  160.     /*
  161.      * special handling for words which take no objects or modifiers they
  162.      * should be alone on a line. they are verbs >= shit  
  163.      */
  164.  
  165.     lptr0 = lptr;
  166.     wscan();
  167.     {
  168.     if (punct == 1)
  169.         goto lab9998;
  170.     else if (punct == 5)
  171.         goto lab9120;
  172.     else
  173.         goto lab9150;
  174.     }
  175.     /* inner loop for all words after verb  */
  176.  
  177. lab200:
  178.     wptr += 1;
  179.     if (wptr > 27)
  180.     goto lab9180;
  181.  
  182. lab201:
  183.     lptr0 = lptr;
  184.     wscan();
  185.     if (punct != 0)
  186.     goto lab210;
  187.     find(BUZMAX);
  188.     /* special code for "noun1 of noun2" construct  */
  189.  
  190.     if (indx == 4 && wrdtyp[wptr - 1] == 4)
  191.     offlg = 1;
  192.     if (indx != 0)
  193.     goto lab201;
  194.     goto lab215;
  195. lab210:
  196.     if (punct == 4)
  197.     goto lab9000;
  198.     if (punct == 5)
  199.     goto lab9020;
  200.     if (punct == 6)
  201.     goto lab9140;
  202.     if (punct != 2)
  203.     goto lab215;
  204.     if (wrdtyp[wptr - 1] != 4)
  205.     goto lab9010;
  206.     wrdtyp[wptr] = -2;
  207.     goto lab200;
  208.  
  209. lab215:
  210.     if (wrdtyp[wptr - 1] != 2 || (wrdnum[wptr - 1] != ASK
  211.                   && wrdnum[wptr - 1] != TELL))
  212.     goto lab220;
  213.     if (punct == 3)
  214.     goto lab9019;
  215.     if (punct != 0)
  216.     goto lab9010;
  217.     if (actor != 1)
  218.     goto lab9100;
  219.     /*
  220.      * this code is to set up addressing a second "person" the phrases "ask
  221.      * frog" or "tell frog" etc are discarded and the variable "actor" tells
  222.      * us who is addressed  
  223.      */
  224.  
  225.     askx = wrdnum[wptr - 1];
  226.     find(VOCMAX);
  227.     if ((index[3] != 0) &&
  228.     (index[3] < ROBOT || index[3] > FERRET))
  229.     goto lab9090;
  230.     if (index[3] == 0)
  231.     goto lab9160;
  232.     actor = index[3];
  233.     lptr0 = lptr;
  234.     chgact = 1;
  235.     wscan();
  236.     if (punct != 2)
  237.     goto lab9110;
  238.     goto lab5;
  239.     /* code for numbers inputted in a statement */
  240.  
  241. lab220:
  242.     if (punct != 3)
  243.     goto lab240;
  244.     wrdtyp[wptr] = 4;
  245.     wrdnum[wptr] = three[0] + 10000;
  246.     goto lab200;
  247.     /* all regular words go here */
  248.  
  249. lab240:
  250.  
  251.     if (punct != 1)
  252.     goto lab250;
  253.     wrdtyp[wptr] = -1;
  254.     goto lab9999;
  255. lab250:
  256.     find(VOCMAX);
  257.     if (indx == 0)
  258.     goto lab9040;
  259.     /* special code for "of" handler */
  260.  
  261.     if (offlg) {
  262.     offlg = 0;
  263.     if (index[3] != 0 && wrdtyp[wptr - 2] != 3) {
  264.         /* exchange two nouns and tell parser the first is an adjective */
  265.  
  266.         wrdtyp[wptr] = wrdtyp[wptr - 1];
  267.         wrdnum[wptr] = wrdnum[wptr - 1];
  268.         wrdtyp[wptr - 1] = 3;
  269.         wrdnum[wptr - 1] = index[3];
  270.         if (wrdnum[wptr] == PHOTOG && wrdnum[wptr - 1] == FERRET) {
  271.         wrdnum[wptr - 1] = FAMILY;
  272.             }
  273.             goto lab200;
  274.         }
  275.     else
  276.             goto lab9200;
  277.     }
  278.     if (indx != AND)
  279.     goto lab270;
  280.     if (wrdtyp[wptr - 1] == -2)
  281.     goto lab201;
  282.     if (wrdtyp[wptr - 1] != 4)
  283.     goto lab9120;
  284.     wrdtyp[wptr] = -2;
  285.     goto lab200;
  286. lab270:
  287.     if (index[1] != 0 && index[0] == 0 && index[2] == 0
  288.     && index[3] == 0 && index[4] == 0)
  289.     goto lab9080;
  290.     if (index[0] == 0)
  291.     goto lab280;
  292.     if (adverb != 0)
  293.     goto lab9070;
  294.     adverb = indx;
  295.     if (adverb == WHERE || adverb == WHAT)
  296.     goto lab9130;
  297.     goto lab201;
  298.     /* at this point the word must be an adjectine, noun or preposition */
  299.  
  300. lab280:
  301.     if (wrdtyp[wptr - 1] == 3 && index[2] != 0)
  302.     goto lab9170;
  303.     if (index[2] != 0) {
  304.     wrdtyp[wptr] = 3;
  305.     wrdnum[wptr] = index[2];
  306.     } else if (index[3] != 0) {
  307.     wrdtyp[wptr] = 4;
  308.     wrdnum[wptr] = index[3];
  309.     } else {
  310.     wrdtyp[wptr] = 5;
  311.     wrdnum[wptr] = index[4];
  312.     }
  313.     if ((wrdtyp[wptr] == 4 && wrdtyp[wptr - 1] == 3) &&
  314.     wrdnum[wptr] < SAPPHI)
  315.     goto lab9190;
  316.     goto lab200;
  317.  
  318.  
  319.     /***********       error processing  */
  320.  
  321. lab9000:
  322.     lxx = lptr;
  323.     errno = 1;
  324.     goto lab9900;
  325. lab9010:
  326.     lxx = lptr;
  327.     errno = 2;
  328.     goto lab9900;
  329. lab9019:
  330.     lptr -= 1;
  331. lab9020:
  332.     lptr += 1;
  333.     lxx = lptr;
  334.     errno = 3;
  335.     goto lab9900;
  336. lab9030:
  337.     lxx = lptr;
  338.     errno = 4;
  339.     goto lab9900;
  340. lab9040:
  341.     lxx = lptr;
  342.     errno = 5;
  343.     goto lab9900;
  344. lab9050:
  345.     lxx = lptr;
  346.     errno = 6;
  347.     goto lab9900;
  348. lab9070:
  349.     lxx = lptr;
  350.     errno = 8;
  351.     goto lab9900;
  352. lab9080:
  353.     lxx = lptr;
  354.     errno = 9;
  355.     goto lab9900;
  356. lab9090:
  357.     lxx = 0;
  358.     errno = 10;
  359.     goto lab9900;
  360. lab9100:
  361.     lxx = 0;
  362.     errno = 11;
  363.     goto lab9900;
  364. lab9110:
  365.     lxx = lptr0 + 1;
  366.     errno = 12;
  367.     goto lab9900;
  368. lab9120:
  369.     lxx = lptr;
  370.     errno = 13;
  371.     goto lab9900;
  372. lab9130:
  373.     lxx = 0;
  374.     errno = 14;
  375.     goto lab9900;
  376. lab9140:
  377.     lxx = lptr;
  378.     errno = 15;
  379.     goto lab9900;
  380. lab9150:
  381.     lxx = lptr0;
  382.     errno = 16;
  383.     goto lab9900;
  384. lab9160:
  385.     lxx = 0;
  386.     errno = 17;
  387.     goto lab9900;
  388. lab9170:
  389.     lxx = lptr;
  390.     errno = 18;
  391.     goto lab9900;
  392. lab9180:
  393.     lxx = 0;
  394.     errno = 25;
  395.     goto lab9900;
  396. lab9190:
  397.     lxx = lptr;
  398.     errno = 107;
  399.     goto lab9900;
  400. lab9200:
  401.     lxx = lptr;
  402.     errno = 112;
  403. lab9900:
  404.     carerr(lxx, errno);
  405.     return (result);
  406. lab9998:
  407.     wrdtyp[1] = -1;
  408. lab9999:
  409.     if ((askx == TELL && (adverb == WHERE || adverb == WHAT))
  410.     || (askx == ASK && (adverb != WHERE && adverb != WHAT)))
  411.     goto lab9130;
  412.     if (adverb == WHERE || adverb == WHAT)
  413.     dotflg = 1;
  414.     result = 1;
  415.     return (result);
  416.  
  417. }
  418.  
  419. wscan()
  420. /*
  421.  * this routine reads the input ascii code and scans for punctuation or
  422.  * numbers and then converts the first 9 letters of a word to three integer*2
  423.  * words of radix 32 form  
  424.  */
  425.  
  426. {
  427.     char            m;
  428.     static int      pow32[] = {1, 32, 1024, 32768};
  429.     int             plcpnt, wpnt, kchar;
  430.  
  431.     if (dotflg) {
  432.     actor = 1;
  433.     dotflg = 0;
  434.     }
  435.     plcpnt = 1;
  436.     punct = 0;
  437.     wpnt = 1;
  438.     three[0] = 0;
  439.     three[1] = 0;
  440.     three[2] = 0;
  441.     while (inbuf[lptr] == ' ')
  442.     lptr++;
  443.     /*
  444.      * punct =1 is period, 2 is comma, 3 is number,4 is illegal character and
  445.      * 5 means a number directly follows a word 6 means letter follows a
  446.      * number 
  447.      */
  448.  
  449.     if (inbuf[lptr] == '.' || inbuf[lptr] == '?') {
  450.     dotflg = 1;
  451.     punct = 1;
  452.     lptr += 1;
  453.     return (0);
  454.     }
  455.     if (inbuf[lptr] == ',') {
  456.     punct = 2;
  457.     lptr += 1;
  458.     return (0);
  459.     }
  460.     while (inbuf[lptr] >= '0' && inbuf[lptr] <= '9') {
  461.     /* number handling */
  462.  
  463.     punct = 3;
  464.     if (three[0] < 3200)
  465.         three[0] = three[0] * 10 + inbuf[lptr] - '0';
  466.     lptr += 1;
  467.     }
  468.     if (punct == 3 && (inbuf[lptr] != '.' &&
  469.                inbuf[lptr] != ',' && inbuf[lptr] != '?' &&
  470.                inbuf[lptr] != ' '))
  471.     punct = 6;
  472.     if (punct == 3 || punct == 6)
  473.     return (0);
  474.     do {
  475.     if (!((inbuf[lptr] >= 'a' && inbuf[lptr] <= 'z') ||
  476.           (inbuf[lptr] >= 'A' && inbuf[lptr] <= 'Z'))) {
  477.         lptr += 1;
  478.         punct = 4;
  479.         return (0);
  480.         /* the actual letter packing is done here  */
  481.  
  482.     }
  483.     kchar = inbuf[lptr];
  484.     if (kchar >= 'a' && kchar <= 'z')
  485.         kchar -= ' ';
  486.     if (wpnt < 4)
  487.         three[wpnt - 1] = three[wpnt - 1] +
  488.                                 (kchar - '@') * pow32[3 - plcpnt];
  489.     plcpnt += 1;
  490.     if (plcpnt >= 4) {
  491.         wpnt += 1;
  492.         plcpnt = 1;
  493.     }
  494.     lptr += 1;
  495.     m = inbuf[lptr];
  496.     if (m == ' ' || m == ',' || m == '.' || m == '?') {
  497.         if (three[0] != 20741 || three[1] != 14336 ||
  498.         three[2] != 0)
  499.         return (0);
  500.         punct = 1;
  501.         return (0);
  502.     }
  503.     }
  504.     while (m < '0' || m > '9');
  505.     punct = 5;
  506.     return (0);
  507. }
  508.  
  509.  
  510. find(m)
  511.     int             m;
  512. {
  513.     /*
  514.      * this routine searches a vocabulary to find a word. index, on output,
  515.      * gives the position of the word in the list. synonyms do not increment
  516.      * the counter, so index*3-2 is **not** the actual pointer to the word in
  517.      * the list 
  518.      */
  519.  
  520.     int             i, t, k, type;
  521.  
  522.     for (i = 0; i < 5; i++)
  523.     index[i] = 0;
  524.     t = 0;
  525.     indx = 0;
  526.  
  527.     for (i = 1; i <= m * 3 - 2; i += 3) {
  528.     if (vocab[i] > 0)
  529.         indx += 1;
  530.     if (abs(vocab[i]) != three[0])
  531.         continue;
  532.     if (vocab[i + 1] != three[1])
  533.         continue;
  534.     if (vocab[i + 2] == three[2]) {
  535.         t = indx;
  536.         type = 1;
  537.         for (k = 1; k <= 4; k++)
  538.         if (indx >= typlst[k - 1])
  539.             type = type + 1;
  540.         index[type - 1] = indx;
  541.     }
  542.     }
  543.     indx = t;
  544. }
  545.  
  546. lbit(arg, pow)
  547.     int             arg, pow;
  548. {
  549.     return ((arg & (1 << pow)) != 0);
  550. }
  551.  
  552. parse()
  553. {
  554.     /*
  555.      * subroutine parse this mess deciphers the various direct and indirect
  556.      * (i.e. second, usually, but in 'give frog cup' the frog is the i.o.)
  557.      * objects. it associates them with their respective adjectives (dobjs(i)
  558.      * and doadjs(i) correspond) butflg is set if the "all but" construct is
  559.      * encountered allflg is set if the "all" construct is enconntered the
  560.      * d.o. and i.o prepositions are put in prepdo and prepio 
  561.      */
  562.  
  563.     int             result, wptr, thevrb, vrbind, vdo, vio, vobj, i;
  564.     int             frstaj, frstnn, errno, tprp;
  565.     result = 0;
  566.     thevrb = wrdnum[0];
  567.     vrbind = thevrb - VRBMIN + 1;
  568.  
  569.     vdo = 0;
  570.     vio = 0;
  571.     vobj = 0;
  572.     if (thevrb < SHIT) {
  573.     vdo = vrbpdo[vrbind];
  574.     vio = vrbpio[vrbind];
  575.     vobj = vrbobj[vrbind];
  576.     }
  577.     butflg = 0;
  578.     allflg = 0;
  579.     numdo = 0;
  580.     prepdo = 0;
  581.     prepio = 0;
  582.     iobj = 0;
  583.     ioadj = 0;
  584.     for (i = 0; i < 12; i++) {
  585.     dobjs[i] = 0;
  586.     doadjs[i] = 0;
  587.     }
  588.     /* this block is a test for "sit down" or "get up" or "look up" etc */
  589.  
  590.     if (((lbit(vobj, 1) && wrdnum[1] == DOWN) ||
  591.      (lbit(vobj, 2) && wrdnum[1] == UP)) && wrdtyp[2] == -1) {
  592.     prepdo = wrdnum[1];
  593.     result = 1;
  594.     goto finalout;
  595.     }
  596.     /* yell allows anything after it */
  597.  
  598.     if (thevrb == YELL)
  599.     goto testout;
  600.     wptr = 1;
  601.     frstaj = 0;
  602.     frstnn = 0;
  603.     /* a preposition immediately follows verb */
  604.  
  605.     if (wrdtyp[wptr] == 5) {
  606.     prepdo = wrdnum[wptr];
  607.     if (prepdo == BUT) {
  608.         errno = 21;
  609.         goto errorout;
  610.     }
  611.     if (!lbit(vdo, (prepdo - PRPMIN))) {
  612.         errno = 21;
  613.         goto errorout;
  614.     }
  615.     wptr += 1;
  616.     }
  617.     /*
  618.      * adjective follows verb *** special case of "terran" and "cygnan" as
  619.      * nouns 
  620.      */
  621.  
  622.     if (wrdtyp[wptr] == 3) {
  623.     if ((wrdnum[wptr] == TERRAN || wrdnum[wptr] == CYGNAN)
  624.         && wrdnum[0] == TRANSL)
  625.         wrdtyp[wptr] = 4;
  626.     else {
  627.         frstaj = wrdnum[wptr];
  628.         doadjs[0] = frstaj;
  629.         wptr += 1;
  630.     }
  631.     }
  632.     /* this takes care of the case of a verb alone on a line */
  633.  
  634.     if (wrdtyp[wptr] != 4) {
  635.     if (wrdtyp[wptr] != -1) {
  636.         errno = 28;
  637.         goto errorout;
  638.     } else {
  639.         {
  640.         if (thevrb >= SHIT) {
  641.             result = 1;
  642.             goto finalout;
  643.         }
  644.         if (!lbit(vobj, 7)) {
  645.             result = 1;
  646.             goto finalout;
  647.         }
  648.         }
  649.         errno = 27;
  650.         goto errorout;
  651.     }
  652.     }
  653.     frstnn = wrdnum[wptr];
  654.     /* look at first set of objects (not always d.o.) */
  655.  
  656.     dobjs[0] = frstnn;
  657.     numdo += 1;
  658.     if (numdo == 9) {
  659.     errno = 25;
  660.     goto errorout;
  661.     }
  662.     wptr += 1;
  663.  
  664.  
  665.     /* the following takes care of multiple objects */
  666.  
  667.     if (frstnn == ALL) {
  668.     if (!lbit(vobj, 5)) {
  669.         errno = 22;
  670.         goto errorout;
  671.     }
  672.     if (frstaj != 0) {
  673.         errno = 26;
  674.         goto errorout;
  675.     }
  676.     allflg = 1;
  677.     if (wrdnum[wptr] == BUT) {
  678.         butflg = 1;
  679.         /* check for adjective before noun */
  680.  
  681.         if (!(wrdtyp[wptr + 1] == 4 || (wrdtyp[wptr + 1] == 3
  682.                         && wrdtyp[wptr + 2] == 4))) {
  683.         errno = 23;
  684.         goto errorout;
  685.         }
  686.         wptr += 1;
  687.     }
  688.     }
  689.     if (butflg || (wrdtyp[wptr] == -2)) {
  690.     if (!lbit(vobj, 5)) {
  691.         errno = 22;
  692.         goto errorout;
  693.     }
  694.     mulobj(&wptr);
  695.     if (numdo > 9) {
  696.         errno = 25;
  697.         goto errorout;
  698.     }
  699.     }
  700.     /********** end multiple obj processor  */
  701.  
  702.  
  703.     if (wrdtyp[wptr] == -1)
  704.     goto testout;
  705.  
  706.     /* if the verb is "is" we may have a final adjective  */
  707.  
  708.     if (thevrb == IS && wrdtyp[wptr] == 3) {
  709.     doadjs[1] = wrdnum[wptr];
  710.     if (wrdtyp[wptr + 1] == -1)
  711.         goto testout;
  712.     errno = 20;
  713.     goto errorout;
  714.     }
  715.     /*
  716.      * if the next word is a noun or adjective, and verb is not "is" we have
  717.      * a non-prep indirect object such as the frog in "give frog water" 
  718.      */
  719.  
  720.     if (wrdtyp[wptr] == 4 || (wrdtyp[wptr] == 3 && wrdtyp[wptr + 1]
  721.                   == 4)) {
  722.     if (numdo > 1 || prepdo != 0) {
  723.         errno = 22;
  724.         goto errorout;
  725.     }
  726.     if (!lbit(vobj, 3)) {
  727.         errno = 24;
  728.         goto errorout;
  729.     }
  730.     prepio = TO;
  731.     ioadj = frstaj;
  732.     iobj = frstnn;
  733.     doadjs[0] = 0;
  734.     if (wrdtyp[wptr] == 3) {
  735.         doadjs[0] = wrdnum[wptr];
  736.         wptr += 1;
  737.     }
  738.     dobjs[0] = wrdnum[wptr];
  739.     numdo = 1;
  740.     wptr += 1;
  741.     /****** repeat the multiple obj processor */
  742.  
  743.     if (dobjs[0] == ALL) {
  744.         if (!lbit(vobj, 5)) {
  745.         errno = 22;
  746.         goto errorout;
  747.         }
  748.         if (doadjs[0] != 0) {
  749.         errno = 26;
  750.         goto errorout;
  751.         }
  752.         allflg = 1;
  753.         if (wrdtyp[wptr] == 5 && wrdnum[wptr] == BUT) {
  754.         butflg = 1;
  755.         if (!(wrdtyp[wptr + 1] == 4 || (wrdtyp[wptr + 1] == 3
  756.                         && wrdtyp[wptr + 2] == 4))) {
  757.             errno = 23;
  758.             goto errorout;
  759.         }
  760.         }
  761.     }
  762.     if (butflg || wrdtyp[wptr] == -2) {
  763.         if (!lbit(vobj, 5)) {
  764.         errno = 22;
  765.         goto errorout;
  766.         }
  767.         mulobj(&wptr);
  768.         if (numdo > 9) {
  769.         errno = 25;
  770.         goto errorout;
  771.         }
  772.     }
  773.     /***** end multiple object processor */
  774.  
  775.     if (wrdtyp[wptr] != -1) {
  776.         errno = 20;
  777.         goto errorout;
  778.     }
  779.     goto testout;
  780.     }
  781.     /* the only thing left that is legal is a perpositional construct */
  782.  
  783.     if (wrdtyp[wptr] != 5 || wrdnum[wptr] == BUT || (
  784.             wrdtyp[wptr + 1] == 5 && wrdnum[wptr + 1] == BUT)) {
  785.     errno = 20;
  786.     goto errorout;
  787.     }
  788.     tprp = wrdnum[wptr];
  789.     wptr += 1;
  790.     /*
  791.      * check for end of line or two preps in a row (e.g. fill the bottle up
  792.      * with water) 
  793.      */
  794.  
  795.     if (wrdtyp[wptr] == -1 || wrdtyp[wptr] == 5) {
  796.     if (prepdo != 0 || (!lbit(vdo, (tprp - PRPMIN)))
  797.         || (!lbit(vobj, 0))) {
  798.         errno = 20;
  799.         goto errorout;
  800.     }
  801.     prepdo = tprp;
  802.     if (wrdtyp[wptr] == -1)
  803.         goto testout;
  804.     wptr += 1;
  805.     }
  806.     if (!lbit(vio, (wrdnum[wptr - 1] - PRPMIN))) {
  807.     errno = 20;
  808.     goto errorout;
  809.     }
  810.     prepio = wrdnum[wptr - 1];
  811.     if (wrdtyp[wptr] == 3) {
  812.     ioadj = wrdnum[wptr];
  813.     wptr += 1;
  814.     }
  815.     if (wrdtyp[wptr] != 4) {
  816.     errno = 20;
  817.     goto errorout;
  818.     }
  819.     iobj = wrdnum[wptr];
  820.     wptr += 1;
  821.     if (wrdtyp[wptr] != -1) {
  822.     errno = 20;
  823.     goto errorout;
  824.     }
  825. testout:
  826.     if ((dobjs[0] == 0 && lbit(vobj, 7)) || (iobj == 0 &&
  827.                          lbit(vobj, 6))) {
  828.     errno = 20;
  829.     goto errorout;
  830.     }
  831.     if (!lbit(vobj, 4) && dobjs[0] != 0 && prepdo == 0) {
  832.     errno = 19;
  833.     goto errorout;
  834.     }
  835.     result = 1;
  836. finalout:
  837.  
  838.     if (wrdnum[0] == AGAIN) {
  839.     for (i = 0; i < 12; i++) {
  840.         doadjs[i] = zadjs[i];
  841.         dobjs[i] = zobjs[i];
  842.     }
  843.     ioadj = ziadj;
  844.     iobj = ziobj;
  845.     prepdo = zpdo;
  846.     prepio = zpio;
  847.     actor = zactor;
  848.     adverb = zadvrb;
  849.     wrdnum[0] = zverb;
  850.     numdo = znumb;
  851.     allflg = zall;
  852.     butflg = zbut;
  853.     } else {
  854.     for (i = 0; i < 12; i++) {
  855.         zadjs[i] = doadjs[i];
  856.         zobjs[i] = dobjs[i];
  857.     }
  858.     ziadj = ioadj;
  859.     ziobj = iobj;
  860.     zpdo = prepdo;
  861.     zpio = prepio;
  862.     zactor = actor;
  863.     zadvrb = adverb;
  864.     zverb = wrdnum[0];
  865.     zall = allflg;
  866.     zbut = butflg;
  867.     }
  868.     return (result);
  869. errorout:
  870.     carerr(0, errno);
  871.     return (result);
  872. }
  873.  
  874. mulobj(wptr)
  875.     int            *wptr;
  876. {
  877.     /****   multiple opject subroutine from "parse" */
  878.  
  879.     while (1) {
  880.     if (wrdtyp[*wptr] == 3) {
  881.         doadjs[numdo] = wrdnum[*wptr];
  882.         *wptr += 1;
  883.     }
  884.     if (wrdtyp[*wptr] == 4) {
  885.         numdo += 1;
  886.         if (numdo > 10)
  887.         return (1);
  888.         dobjs[numdo - 1] = wrdnum[*wptr];
  889.         *wptr += 1;
  890.         if (wrdtyp[*wptr] != -2)
  891.         return (1);
  892.     }
  893.     *wptr += 1;
  894.     }
  895. }
  896. SHAR_EOF
  897. cat << \SHAR_EOF > vtext.dat.ac
  898. 2001    Steep trail
  899. 2002    Near top of the pass
  900. 2003    Top of the pass
  901. 2004    Branch in the trail
  902. 2005    East shore of the lake
  903. 2006    Gravel beach
  904. 2007    Forest
  905. 2008    Forest
  906. 2009    Forest
  907. 2010    Forest
  908. 2011    Forest
  909. 2012    Base of the spire
  910. 2013    Halfway up the spire
  911. 2014    Top of the spire
  912. 2015    Sandy beach
  913. 2016    Swimming at the coral beds
  914. 2017    North end of the lake
  915. 2018    Vein of minerals
  916. 2019    Southwest of a chasm
  917. 2020    Step-like rock strata
  918. 2021    Northeast of the chasm
  919. 2022    Bottom of a chasm
  920. 2023    Fern-filled ravine
  921. 2024    Beautiful waterfall
  922. 2025    Behind some horsetails
  923. 2026    Southwest of the Mars-like area
  924. 2027    Red rocks
  925. 2028    Red hill
  926. 2029    West of a deep bowl 
  927. 2030    North of a small building
  928. 2031    Southwest of a deep bowl
  929. 2032    Southwest lip of the bowl
  930. 2033    South lip of the bowl
  931. 2034    Southeast lip of the bowl
  932. 2035    Northeast lip of the bowl
  933. 2036    North lip of the bowl
  934. 2037    Northwest lip of the bowl
  935. 2038    Center of the bowl
  936. 2039    South to west trail
  937. 2040    Dump
  938. 2041    Door leading into the ground
  939. 2042    Inside a small building
  940. 2043    West edge of town
  941. 2044    East edge of town
  942. 2045    South of town
  943. 2046    North-southwest trail
  944. 2047    South of a large building
  945. 2048    Bottom of a tower
  946. 2049    Top of the tower
  947. 2050    South of the Mars-jungle boundary
  948. 2051    Inside large Martian building
  949. 2052    Center of a ledge
  950. 2053    East end of the ledge
  951. 2054    West end of the ledge
  952. 2055    Precarious position
  953. 2056    Under an overhang
  954. 2057    West end of a ravine
  955. 2058    Northwest-southeast ridge
  956. 2059    Northeast-southwest path
  957. 2060    Leaf covered clearing
  958. 2061    Stone monument
  959. 2062    Forest, jungle, and green-air junction 
  960. 2063    Open field
  961. 2064    Muddy jungle
  962. 2065    Jungle with rubbery trees
  963. 2066    Up a rubber tree
  964. 2067    Jungle path
  965. 2068    West of greenhouse
  966. 2069    Antenna site
  967. 2070    Greenhouse north
  968. 2071    Greenhouse center
  969. 2072    Greenhouse south
  970. 2073    Vegetable garden
  971. 2074    Fruit garden
  972. 2075    Top of spiral ramp
  973. 2076    Center of aviary roof
  974. 2077    Half way up ramp
  975. 2078    Aviary entrance
  976. 2079    Aviary center
  977. 2080    Half way up pole
  978. 2081    East of greenhouse
  979. 2082    Cacti
  980. 2083    Staircase top
  981. 2084    Staircase middle
  982. 2085    Staircase bottom
  983. 2086    Field of flowers
  984. 2087    Beehives
  985. 2088    Toolshed
  986. 2089    West of barrier
  987. 2090    (90 to 95 are never reached)
  988. 2091     
  989. 2092     
  990. 2093     
  991. 2094     
  992. 2095         
  993. 2096    Bottomless pit
  994. 2097    Bottom of pit
  995. 2098    Back of cave
  996. 2099    Sculptors' studio
  997. 2100    Artist's cavern
  998. 2101    Maze
  999. 2102    Maze
  1000. 2103    Maze
  1001. 2104    Maze
  1002. 2105    Maze
  1003. 2106    Maze
  1004. 2107    Maze
  1005. 2108    Maze
  1006. 2109    Maze
  1007. 2110    Maze
  1008. 2111    Maze
  1009. 2112    Maze
  1010. 2113    Maze
  1011. 2114    Maze
  1012. 2115    Maze
  1013. 2116    Maze
  1014. 2117    Dark tunnel
  1015. 2118    Mushroom farm
  1016. 2119    Round tunnel
  1017. 2120    Curving passage
  1018. 2121    Wet cave
  1019. 2122    Underground pool
  1020. 2123    Underwater
  1021. 2124    Dead end
  1022. 2125    Dead end
  1023. 2126    Tight squeeze
  1024. 2127    Dead end
  1025. 2128    Gold mine
  1026. 2129    Damp crawlway
  1027. 2130    Large hall
  1028. 2131    Ferret home
  1029. 2132    Ferret nursery
  1030. 2133    East-west hall
  1031. 2134    Metal chamber
  1032. 2135    East end of hall
  1033. 2136    North end of hall
  1034. 2137    Hall
  1035. 2138    Hall
  1036. 2139    Hall junction
  1037. 2140    Hall
  1038. 2141    Hall
  1039. 2142    South end of hall
  1040. 2143    Darkroom
  1041. 2144    Library
  1042. 2145    Office
  1043. 2146    Control room
  1044. 2147    Chemical storage
  1045. 2148    Electronic storage
  1046. 2149    Storage room
  1047. 2150    Tool room
  1048. 2151    Mine Entrance
  1049. 2152    Top of mine shaft
  1050. 2153    Teleportation booth
  1051. 2154    Center of great hall
  1052. 2155    North wall of hall
  1053. 2156    Northeast corner of hall
  1054. 2157    East wall of hall
  1055. 2158    Southeast corner of hall
  1056. 2159    South wall of hall
  1057. 2160    Southwest corner of hall
  1058. 2161    West wall of hall
  1059. 2162    Northwest corner of hall
  1060. 2163    Hallway
  1061. 2164    Hallway
  1062. 2165    Large anteroom
  1063. 2166    Giant ship
  1064. 2167    Hallway
  1065. 2168    Viewing room
  1066. 2169    Outer office
  1067. 2170    Secret corridor
  1068. 2171    Office complex
  1069. 2172    Hallway
  1070. 2173    Airlock door
  1071. 2174    Airlock
  1072. 2175    Small ship in dock
  1073. 2176    Orbiting Altair
  1074. 2177    Orbiting Cygnus
  1075. 2178    Orbiting Vega
  1076. 2179    Orbiting Deneb
  1077. 2180    Orbiting Auriga
  1078. 2181    In ship on Cygnus
  1079. 2182    Cygnan landing site
  1080. 2183    Cygnan sea-shore
  1081. 2184    In ship on Auriga
  1082. 2185    Aurigan landing site
  1083. 2186    Aurigan control center
  1084. 2187    In ship on Deneb
  1085. 2188    Deneb landing platform
  1086. 2189    Doorway
  1087. 2190    Sitting room
  1088. 3001    Chrome key
  1089. 4001    Dangling from the nest on a red string is a chrome key.
  1090. 4002    There is a chrome key on a string here.
  1091. 3002    Blue sapphire
  1092. 4001    At the end of one vein is a huge blue sapphire!
  1093. 4002    There is a huge blue sapphire here.
  1094. 3003    Colorful fish
  1095. 4001    Swimming blissfully around, eating the tiny polyps, is a large
  1096. 4001    particularly colorful fish.
  1097. 4002    There is a colorful fish here.
  1098. 4003    It is a very colorful fish indeed, with long fins and a long
  1099. 4003    snout, suitable for eating the tiny polyps. The zoologists at
  1100. 4003    your camp might like to examine it.
  1101. 3004    Dead fish
  1102. 4001    There is a smelly dead fish here.
  1103. 4002    It is now dead and beginning to decompose. You shouldn't have
  1104. 4002    kept it out of the water so long.
  1105. 3005    Knapsack
  1106. 4001    There is a knapsack here.
  1107. 4002    It is a large red canvas backpack, with lots of room and many
  1108. 4002    pockets. You could easily carry many kilograms in it.
  1109. 4003    The knapsack is empty.
  1110. 4004    The knapsack contains:
  1111. 3006    Red shirt
  1112. 4001    Lying on the ground is a red shirt.
  1113. 3007    Green shirt
  1114. 4001    There is a dark green shirt here.
  1115. 3008    Pair of heavy boots
  1116. 4001    There is a pair of heavy boots here.
  1117. 4002    They are for heavy duty hiking.
  1118. 3009    Canvas shoes
  1119. 4001    There is a pair of light canvas shoes here.
  1120. 4002    They are for rock climbing.
  1121. 3010    Blue pants
  1122. 4001    Lying on the ground is a pair of dark blue pants.
  1123. 3011    Tan pants
  1124. 4001    There is a pair of light tan pants here.
  1125. 3012    Butterfly net
  1126. 4001    There is a butterfly net here.
  1127. 4002    The net is empty.
  1128. 4003    The net contains:
  1129. 3013    Plastic tube
  1130. 4001    There is something which looks like a tube of toothpaste here.
  1131. 4002    The label says: "Berry's Bug Dope" 
  1132. 4002         Repels blackflies, bees, gnats and chiggers. Not for use
  1133. 4002         against worms or sharks. Ingredients: DEET (C12H17NO)
  1134. 4002         23%, active ingredient. Inert ingredients:
  1135. 4002         Alcohol (C2H6O)  76%, perfume 1%.
  1136. 4002    The tube is empty.
  1137. 3014    Instant camera
  1138. 4001    There is an instant-picture camera here.
  1139. 4002    It is a space-patrol issue picture-in-a-minute camera, model
  1140. 4002    AN/MQ 30045-9812-773R. It's so automatic that all you have to do
  1141. 4002    is say "shoot" and it will take a picture of the most
  1142. 4002    interesting object around. This little beauty cost the Patrol
  1143. 4002    $6,345,003.00.
  1144. 4002    (Just between you and me, it's a Polaroid Snapshooter 
  1145. 4002    worth $49.95.)    
  1146. 3015    Plastic bag
  1147. 4001    There is a plastic bag here.
  1148. 4002    It is a collecting bag, for preserving living specimens. It is
  1149. 4002    watertight but can "breathe" so living animals can be carried
  1150. 4002    in it.
  1151. 4003    The plastic bag is empty.
  1152. 4004    The plastic bag contains:
  1153. 4005    The bag is full of water.
  1154. 4006    The water-filled bag contains:
  1155. 3016    Crablike fossil
  1156. 4001    Sticking out of the rocks is a huge crablike fossil!
  1157. 4002    There is a large fossil here.
  1158. 3017    Photograph of tiny pterodactyls
  1159. 4001    There is a photograph of some tiny pterodactyls here.
  1160. 4002    There's nothing particularly interesting about the small
  1161. 4002    critters themselves (except to see how sharp their teeth are),
  1162. 4002    but, behind the horsetails seems to be a cave!
  1163. 3018    Photograph of Martians    
  1164. 4001    There is a photograph of some "Martians" here.
  1165. 4002    It's a photo of those odd energy creatures. The scene is what
  1166. 4002    must be a bar. One of them is getting a "charge" from an odd
  1167. 4002    electrical device.
  1168. 4003    The photo is of those odd electrical "Martians" playing their
  1169. 4003    variant of hockey.
  1170. 3019    Huge diamond
  1171. 4001    One of the diamonds is loose.
  1172. 4002    There is a huge diamond here.    
  1173. 3020    Hockey puck
  1174. 4001    Lying on the ground is a hockey puck.
  1175. 4002    It look like an ordinary hockey puck, about 10 centimeters in
  1176. 4002    diameter. Hmmmmmmmmmmm... It seems, however, to be metallic
  1177. 4002    rather than the usual plastic. It is bright and silvery. 
  1178. 4002    Closer scrutiny shows that it is SOLID PLATINUM!
  1179. 3021    Red boulder
  1180. 4001    Lying on the ground is barely liftable boulder.
  1181. 3022    Green moss
  1182. 4001    Lying on the ground is a large piece of soft green moss.
  1183. 4002    Moss is moss is moss. It's a beautiful dark green and very
  1184. 4002    soft and squishy.
  1185. 3023    Glass plate
  1186. 4001    A large piece of glass is lying on the ground.
  1187. 4002    It's a plate of glass, about 80 centimeters in diameter, and one
  1188. 4002    centimeter thick, apparently cut out of a larger piece by some
  1189. 4002    inept glasscutter. It's very sturdy.
  1190. 3024    Piece of wire
  1191. 4001    Lying on the ground is a long piece of wire.
  1192. 4002    It's very heavily insulated, except for the very ends,
  1193. 4002    which are stripped clean.
  1194. 4003    The wire is attached to the tower.
  1195. 4004    The wire is tied to the knob in the stool.
  1196. 3025    Glowing sphere
  1197. 4001    Lying on the ground is a glowing sphere.
  1198. 4002    The sphere is about ten centimeters in diameter. It is hollow,
  1199. 4002    with rather thick walls. Inside is a smaller sphere, about one 
  1200. 4002    centimeter in diameter. The glow seems to emanate from the
  1201. 4002    whole inner wall it, but is brighter near where the small sphere
  1202. 4002    rests. It is extremely heavy for its size. 
  1203. 3026    Gooey latex
  1204. 4001    Flowing from the bark of the tree is a large quantity of gooey
  1205. 4001    latex. It flows down the tree making a rubbery coating. If you
  1206. 4001    had a bucket you could collect a large quantity.
  1207. 4002    There is a puddle of congealed latex here.
  1208. 4003    A sticky layer of rubber covers the pole.
  1209. 4004    It is a mildly viscous, very sticky liquid, with a faint 
  1210. 4004    turpentine-like odor. If spread in a thin layer on something
  1211. 4004    it soon congeals into a smooth, pliable, and only faintly sticky
  1212. 4004    coating.
  1213. 4005    It seems to have congealed into a solid mass.
  1214. 3027    Damaged cable
  1215. 4001    There is a damaged microwave cable here.
  1216. 4002    It is a green cable about one meter long with connectors on each
  1217. 4002    end. The middle has been chewed almost through by a rodent.
  1218. 3028    Good cable
  1219. 4001    There is a good microwave cable here.
  1220. 4002    It is a green cable about one meter long with connectors on
  1221. 4002    each end. It is in good condition.
  1222. 3029    Beautiful orchid
  1223. 4001    Sitting on the bench is a potted orchid.
  1224. 4002    There is a beautiful orchid here.
  1225. 4003    It is violet, white and magenta, about 20 cm across, and a
  1226. 4003    striking example of the evolutionary similarity of this planet
  1227. 4003    and the earth.
  1228. 3030    Venus flytrap
  1229. 4001    Sitting on the bench is a potted Venus flytrap plant.
  1230. 4002    There is a Venus flytrap here.
  1231. 4003    It is green and nasty. It is obviously carnivorous, although
  1232. 4003    the resemblance to it's earthly namesake is tenuous.
  1233. 3031    Large cassette
  1234. 4001    Lying on the ground is a large cassette for film.
  1235. 4002    It is about 30 centimeters square and 1 cm thick. An indicator
  1236. 4002    shows that it is properly loaded with film.
  1237. 3032    Overexposed photograph
  1238. 4001    There is an overexposed photograph here.
  1239. 4002    Something, probably radioactive, has caused this photo to be 
  1240. 4002    so overexposed as to be unusable.
  1241. 3033    Tomato
  1242. 4001    There is a tomato here.
  1243. 4002    It looks like a delicious red tomato.
  1244. 3034    Lettuce
  1245. 4001    There is a head of lettuce here.
  1246. 4002    Lettuce is lettuce. It is not very nutritious.
  1247. 3035    Cabbage
  1248. 4001    There is a head of cabbage here.
  1249. 4002    Cabbage is cabbage.
  1250. 3036    Strawberry
  1251. 4001    There is a giant strawberry here.
  1252. 4002    It is 10 centimeters across and red, like a strawberry.
  1253. 3037    Grapes
  1254. 4001    A large bunch of grapes grows on a vine here.
  1255. 4002    The is a bunch of grapes here.
  1256. 4003    They are green and look good enough to eat.
  1257. 3038    Sunflower seed
  1258. 4001    Growing on one of the plants is a full-grown seed.
  1259. 4002    There is a large sunflower seed here.
  1260. 4003    It is a black seed with a metallic sheen, about 10 cm across.
  1261. 4003    It is shaped like a large peach pit, with deep grooves in the
  1262. 4003    sides.
  1263. 3039    Bucket
  1264. 4001    There is a bucket here.
  1265. 4002    The bucket is full of water.
  1266. 4003    The bucket is empty
  1267. 4004    The bucket contains:
  1268. 3040    Pitchfork
  1269. 4001    There is a pitchfork here.
  1270. 3041    Shovel
  1271. 4001    There is a shovel here.
  1272. 3042    Robot
  1273. 4001    There is a robot here.
  1274. 4002    There is a slightly corroded robot here.
  1275. 4003    The robot is about one and a half meters tall. It is almost
  1276. 4003    spherical, sitting on four lightly sprung wheels. On top is
  1277. 4003    what looks like a car antenna. Beneath that is a rotating TV
  1278. 4003    camera. It has two arms, one of which is a rather delicate-
  1279. 4003    looking clasping device. The other is a swivel-mounted hose
  1280. 4003    arrangement obviously designed for it's primary purpose of
  1281. 4003    watering plants. In the control section beneath the TV eye are
  1282. 4003    a microphone and a speaker.    
  1283. 4004    The robot is empty-handed.
  1284. 4005    The robot holds:
  1285. 3043    Statue
  1286. 4001    There is a small statue here
  1287. 4002    It is a carving of a ferret. The ferret is holding a small star.
  1288. 4002    It must be some sort of religious object.
  1289. 3044    Mushroom
  1290. 4001    There is a huge mushroom here.
  1291. 3045    Gold nugget
  1292. 4001    Lying on the ground is a large nugget of gold.
  1293. 3046    Photograph of wall paintings.
  1294. 4001    There is a photograph of some wall paintings here.
  1295. 4002    You recognize the paintings made be the ferret-artist.
  1296. 3047    Photograph of ferret family
  1297. 4001    There is a photo of some ferrets here.
  1298. 4002    It is a typical boring family photo, not some artistic wonder.
  1299. 4002    What more did you expect?
  1300. 3048    Black cat
  1301. 4001    Sitting on the platform is a very unhappy black cat.
  1302. 4002    There is a large black cat purring contentedly here.
  1303. 3049    Container of DEET
  1304. 4001    There is a supply of DEET here.
  1305. 4002    It is a slightly viscous, colorless, slightly sweet liquid.
  1306. 3050    Container of nvglo
  1307. 4001    There is a supply of nvglo here.
  1308. 4002    It is a pale pink powder. It's dust makes you sneeze.
  1309. 3051    Container of sbkl
  1310. 4001    There is a supply of sbkl here.
  1311. 4002    It consists of large white crystals.
  1312. 3052    "Terran" cartridge
  1313. 4001    There is a plug-in cartridge marked "Gviizm-Terran" here.
  1314. 4002    It looks like it would plug into a computer.
  1315. 3053    Knife
  1316. 4001    There is a knife here.
  1317. 3054    Hammer
  1318. 4001    There is a hammer here.
  1319. 3055    Screwdriver
  1320. 4001    There is a screwdriver here.
  1321. 3056    "Cygnan" cartridge
  1322. 4001    There is a plug-in cartridge marked "Xbtmzm-Cygnan" here. 
  1323. 4002    It looks like it would plug into a computer.
  1324. 3057    Glowing bead
  1325. 4001    There is a glowing glass bead here.
  1326. 4002    It is about a centimeter in diameter, glowing brightly
  1327. 4002    and quite hot.
  1328. 3058    Silicon "Insect"
  1329. 4001    Basking in the heat of the fire is a tiny silicon insect.
  1330. 4002    There is a tiny silicon insect here.
  1331. 4003    It looks like a small metallic grasshopper. The body is made
  1332. 4003    of a gray semi-metallic substance which looks like silicon.
  1333. 4003    The wings are a transparent red, as if made of some zinc or
  1334. 4003    arsenic mineral. The eyes are bright iridescent blue-green.
  1335. 4003    The thing is obviously a bit cold away from the fiery pit,
  1336. 4003    but not in severe distress. The whole effect is as if some piece
  1337. 4003    of precious jewelry had come to life.
  1338. 3059    Piece of Xray film
  1339. 4001    There is a piece of used xray film here.
  1340. 4002    The xray film contains no useful image.
  1341. 4003    The xray film, though not well exposed, contains the image of a
  1342. 4004    The xray film, though showing an image, is all jumbled up and
  1343. 4004    unusable.
  1344. 4005    The xray film appears to have been improperly processed.
  1345. 4005    Perhaps you didn't get the chemicals in the proper places.
  1346. 3060    Magnesium box
  1347. 4001    There is a magnesium box here.
  1348. 4002    It is a medium sized lock-box. The lock mechanism consists of
  1349. 4002    a left dial and a right dial, each of which reads from 0 to 999.
  1350. 4003    The box is empty.
  1351. 4004    The box contains:
  1352. 3061    Good disc
  1353. 4001    There is a good silicon disc here.
  1354. 4002    It is a round piece of silicon, with gold contact pads around 
  1355. 4002    the edge. It might be some sort of computer memory chip.
  1356. 4002    However, due to the presence of some sort of plastic coating
  1357. 4002    appearing in places on it, it clearly is not fully processed.
  1358. 3062    Broken disc
  1359. 4001    There is a broken silicon disc here.
  1360. 4002    It is a round piece of silicon, with gold contact pads around 
  1361. 4002    the edge. It might be some sort of computer memory chip.
  1362. 4002    It looks ready to use, except that a small piece is broken
  1363. 4002    off of one corner.
  1364. 3063    Violet crystal
  1365. 4001    Lying on the ground is a beautiful large violet crystal.
  1366. 4002    It is a large crystal, very light for its size, with a pale 
  1367. 4002    violet hue. It is probably spodumene, a mineral valuable for
  1368. 4002    its content of lithium, which is used in your ship's drive.
  1369. 3064    Chocolate egg
  1370. 4001    Sitting in the doll house is a chocolate egg.
  1371. 4002    There is a chocolate egg here.
  1372. 3065    Silver coin
  1373. 4001    There is a silver coin here.
  1374. 4002    The coin has a likeness of a reptile on one side and the 
  1375. 4002    notation  &100 on the other.
  1376. 3066    Brass coin
  1377. 4001    There is a brass coin here.
  1378. 4002    It is marked &50.
  1379. 3067    Nickel coin
  1380. 4001    There is a nickel coin here.
  1381. 4002    It is marked &25.
  1382. 3068    Copper coin
  1383. 4001    There is a copper coin here.
  1384. 4002    It is marked &75.
  1385. 3069    Platinum coin
  1386. 4001    There is a platinum coin here.
  1387. 4002    It is marked &300.
  1388. 3070    Map
  1389. 4001    There is a map here.
  1390. 4002    The map is a star map, showing the coordinates of the stars in
  1391. 4002    the vicinity. Some stars are described in script which you
  1392. 4002    cannot read.
  1393. 4003    This appears to be a souvenir map of the galaxy. Among prominent
  1394. 4003    locations are the following:
  1395. 4003     Location         Right ascension      Declination
  1396. 4003     Altair                0556               2331
  1397. 4003     Cygnus                2445               4293
  1398. 4003     Vega                  7552               2204
  1399. 4003     Deneb                 1105               6339
  1400. 4003     Auriga                3111               3325
  1401. 3071    Red ball
  1402. 4001    There is a small red ball here.
  1403. 3072    Newspaper
  1404. 4001    There is a newspaper here.
  1405. 4002    The writing is unintelligible.
  1406. 4003    A banner at the top of the paper says "EXTRA".
  1407. 4003    A subtitle says "Teleporter to Test Site #6 Reactivated".
  1408. 4003    The gist of the article is that the teleportation link to
  1409. 4003    the planet known as Test Site #6, which recently failed,
  1410. 4003    causing district administrator Glathryx to arrive at the
  1411. 4003    space station minus his third and fourth leg sets, and then
  1412. 4003    became totally inoperative, has come back in operation. 
  1413. 4003    It seems that an intruder into the test site is suspected
  1414. 4003    of causing these recent events. All persons are requested
  1415. 4003    to be on the lookout for at strange alien, whose description
  1416. 4003    more or less fits you.
  1417. 3073    Yellow rod
  1418. 4001    There is a yellow rod here.
  1419. 3074    Written note
  1420. 4001    There is a piece of paper with a note on it here.
  1421. 4002    The note is unintelligible.
  1422. 4003    The note is partly obliterated by coffee stains, but you can
  1423. 4003    just make out
  1424. 4003      Do it twice 
  1425. 4003      Door combinations ....
  1426. 4003      Small ship   99  ??   ??
  1427. 5001    Volcanic spire
  1428. 4001    %%%%
  1429. 4002    The spire, although steep, has many small rock flakes
  1430. 4002    on which a person could stand if he had the right kind of shoes.
  1431. 4003    Why not try to take a mountain. It's just as easy.
  1432. 5002    Tiny pterodactyls
  1433. 4001    They are rather cute but nasty creatures, with greenish-gray
  1434. 4001    skin, venomous red eyes and long razorlike tails.
  1435. 4002    That's not wise. They are vicious creatures and would bite you
  1436. 4002    The bite of most animals here is fatal.
  1437. 5003    Ceramic stool
  1438. 4001    As you reach over to look at the stool, a spark jumps out from
  1439. 4001    the knob in the center and shocks you.
  1440. 4002    It's too heavy to lift.
  1441. 5004    Metal knob
  1442. 4001    As you get near the knob it gives you a painful but harmless
  1443. 4001    electrical shock.
  1444. 4002    The knob is permanently attached to its base, which is attached
  1445. 4002    forever to the ground.
  1446. 5005    Round window
  1447. 4001    The window is about 1 meter in diameter, with plate glass.
  1448. 4002    The window in the building seems to have been vandalized.
  1449. 4003    The glass is quite permanently set in its frame.
  1450. 5006    Round door
  1451. 4001    In the front of the building is a round door which is closed.
  1452. 4002    In the front of the building is a round door which is open.
  1453. 4003    In the center of the door is a small metal dimple.
  1454. 4004    It is attached to unreachable and unbreakable hinges.
  1455. 5007    Tower
  1456. 4001         
  1457. 4002    Have you eaten a hallucinogenic drug?
  1458. 5008    Metal dimple
  1459. 4001
  1460. 4002    Silly!
  1461. 5009    Stone cube
  1462. 4001    The inscription on the monument reads:
  1463. 4001    (translated into English)
  1464. 4001                  
  1465. 4001               Site of first landing party
  1466. 4001                      Year 21007
  1467. 4001
  1468. 4002    If you wish me to give you a hernia, please say so directly.
  1469. 5010    Horsetails
  1470. 4001    Horsetails are primitive plants, which live today on earth 
  1471. 4001    in wet cool forests. Today they are rather small, but 
  1472. 4001    millions of years ago there were ones several meters tall.
  1473. 4001    On this planet the large ones are still common. Here they
  1474. 4001    form a line to the sides of the waterfall, where the spray
  1475. 4001    keeps them wet. The pterodactyls seem to live somewhere
  1476. 4001    behind them.
  1477. 4002    Horsetails are used only to scour pans, which you don't have.
  1478. 5011    Metal door
  1479. 4001    The door is closed.
  1480. 4002    The door is open.
  1481. 4003    Why would you wish to carry that around?
  1482. 5012    Glass door
  1483. 4001    The door is closed.
  1484. 4002    The door is open.
  1485. 4003    You can't take that. It's to big to get anywhere.
  1486. 5013    Rabbit hole
  1487. 4001    In the ground is a small hole, probably the entrance to a
  1488. 4001    rabbit warren.
  1489. 4002    In the ground is the gaping entrance of a bottomless pit.
  1490. 4003    A hole is the absence of something. You can't take air. 
  1491. 5014    Louver
  1492. 4001    Someone has ransacked the louver. A gaping hole remains.
  1493. 4002    Why bother?
  1494. 5015    Grape vines
  1495. 4001    Growing here in great profusion are grape vines.
  1496. 4002    There are some shriveled-up grape vines here.
  1497. 4003    Useless. Useless.    
  1498. 5016    Slot
  1499. 4001    The slot is empty.
  1500. 4002    The slot contains:
  1501. 4003    How can you take that, stupid?
  1502. 5017    Square button
  1503. 4001    Silly!
  1504. 5018    Square button
  1505. 4001    Not bloody likely.
  1506. 5019    Round button
  1507. 4001    Not until you reach Nirvana.
  1508. 5020    Hexagonal button
  1509. 4001    You take the little plastic cover off the button, but
  1510. 4001    the underlying mechanism still works.
  1511. 5021    Video screen
  1512. 4001    The video screen is blank.
  1513. 4002    The video screen shows the view taken by the robot's camera.
  1514. 4003    It is permanently mounted on the wall.
  1515. 5022    Sink
  1516. 4001    The sink is empty.
  1517. 4002    The sink contains:
  1518. 5023    Microwave antenna
  1519. 4001    The antenna is an ordinary satellite dish. It is 5 meters in
  1520. 4001    diameter, white, and has a horn collector attached to the base
  1521. 4001    by a cable. The cable seems to have been damaged.
  1522. 4002    The antenna is an ordinary satellite dish. It is 5 meters in
  1523. 4002    diameter, white, and has a horn collector attached to the base
  1524. 4002    by a cable. The cable is in working order.
  1525. 4003    The antenna is an ordinary satellite dish. The feed cable is
  1526. 4003    missing.
  1527. 4004    It weighs 4 tons!
  1528. 5024    Enlarger
  1529. 4001    Nothing is sitting on the enlarger base
  1530. 4002    Sitting on the enlarger is:
  1531. 4003    It is bolted to the wall.
  1532. 5025    Rack
  1533. 4001    It has vertical partitions suitable for holding things like film
  1534. 4001    cassettes in a vertical position.
  1535. 4002    The rack is empty.
  1536. 4003    The rack contains:
  1537. 4004    It is attached to the bench.
  1538. 5026    Tray.
  1539. 4001    The tray is empty.
  1540. 4002    The tray contains:
  1541. 4003    It is a molded part of the bench.
  1542. 5027    Hopper
  1543. 4001    The hopper is empty.
  1544. 4002    The hopper contains:
  1545. 4003    It can't me moved.
  1546. 5028    Left funnel
  1547. 4001    Silly!
  1548. 5029    Middle funnel
  1549. 4001    You must be suffering from a mind-scrambling drug.
  1550. 5030    Right funnel
  1551. 4001    That's useless.
  1552. 5031    Red button
  1553. 4001    It's part of a machine which is too heavy to move.
  1554. 5032    Desk
  1555. 4001    The desk is empty.
  1556. 4002    The desk contains:    
  1557. 4003    It's too heavy to carry.
  1558. 5033    Level indicator
  1559. 4001    The level indicator shows too little water.
  1560. 4002    The water level is just about right.
  1561. 4003    Don't kid me!
  1562. 5034    Red light
  1563. 4001    The red light is on.
  1564. 4002    The red light is off.
  1565. 4003    The red light comes off in your hand. (Sorry, just kidding.)
  1566. 5035    Green light
  1567. 4001    The green light is off.
  1568. 4002    The green light is on.
  1569. 4003    You're getting tiring, trying to take immovable objects.
  1570. 5036    Acid flow
  1571. 4001    There is nothing sitting in the acid.
  1572. 4002    Sitting in the acid is:
  1573. 4003    The robot can't bend over far enough.
  1574. 5037    Fiery pit
  1575. 4001    Silly!
  1576. 5038    Sulfurous mud
  1577. 4001    The robot can't bend over to reach it.
  1578. 5039    Violet button
  1579. 4001    You can't take it.
  1580. 5040    Orange button
  1581. 4002    It is fixed in the wall.
  1582. 5041    White button
  1583. 4001    You remove it. A large Jack-in-the-box jumps out. You are so
  1584. 4001    embarrassed that you carefully put the whole affair back.
  1585. 5042    Blue button
  1586. 4001    As you unscrew it, you notice that your nose falls off also.
  1587. 4001    The switch it operated remains operational.
  1588. 5043    Round recess
  1589. 4001    The recess is empty.
  1590. 4002    The recess contains:
  1591. 4003    Take the air!
  1592. 5044    Red vapor
  1593. 4001    There is nothing near the red vapor.
  1594. 4002    Surrounded by the red vapor is:
  1595. 4003    The robot has no suitable container.    
  1596. 5045    Green vapor
  1597. 4001    There is nothing in the green vapor.
  1598. 4002    Sitting in the green vapor is:
  1599. 4003    The robot has no suitable container.
  1600. 5046    Frogs
  1601. 4001    These are quite ordinary frogs. They are green, a bit slimy, and
  1602. 4001    make a hollow krrooooookkking sound. If you could converse with 
  1603. 4001    them (which you can't), you would discover that their favorite
  1604. 4001    topic of conversation is sex.
  1605. 4002    Taken.   .......    but
  1606. 4002    After a few moments the frog emits a foul-smelling slimy liquid
  1607. 4002    which runs down your arm and begins to itch. You drop the poor
  1608. 4002    creature.
  1609. 5047    Red birds
  1610. 4001    They seem to be parrots.
  1611. 4002    They fly amongst the highest branches of the trees, far above 
  1612. 4002    your reach. 
  1613. 5048    Beautiful birds
  1614. 4001    There are dozens of birds of all colors and sizes here. They 
  1615. 4001    seem to like the most inaccessible branches of the small trees.
  1616. 4002    They are well above your head. You can't climb the trees, as 
  1617. 4002    their trunks are much too weak.
  1618. 5049    Beautiful birds
  1619. 4001    There are several different species: big red ones, little green 
  1620. 4001    ones, ones with violet backs and white and yellow heads, and 
  1621. 4001    many others. They seems to like the highest branches of the 
  1622. 4001    trees.
  1623. 4002    The birds are on the trees, not on the walkway where you stand.
  1624. 5050    Beautiful birds.
  1625. 4001    The birds are hidden by the top branches of the trees.
  1626. 4002    They aren't nearby; they are out of reach in the trees.
  1627. 5051    Bees
  1628. 4001    Any attempt to get close to the bees results in your getting
  1629. 4001    painful stings.
  1630. 5052    Cactus
  1631. 4001    They are much too big and prickly.
  1632. 5053    Doll house
  1633. 4001    It is large and ornate, about 2 meters tall, with four stories.
  1634. 4001    There are the usual windows and doors through which the ferret
  1635. 4001    children put their dolls.
  1636. 4002    It is too big to get out the door.
  1637. 5054    Waterfall
  1638. 4001    Sorry, there is no pot of gold at the end of the rainbow. There
  1639. 4001    isn't even any rainbow, just lots of water.
  1640. 4002    Have you perhaps been eating cactus hallucinogenic drugs?
  1641. 5055    Vending machine
  1642. 4001    There is a vending machine here.
  1643. 4002    It looks exactly like the machines used on earth to dispense
  1644. 4002    candy. The contents look like red balls about one centimeter
  1645. 4002    in diameter. The label says "Ozmtfztv Krooh". It has a slot
  1646. 4002    labeled &300.
  1647. 4003    It looks exactly like the machines used on earth to dispense
  1648. 4003    candy. The contents look like red balls about one centimeter
  1649. 4003    in diameter. The label says "Language Pills". It has a slot
  1650. 4003    labeled &300.
  1651. 4004    It is fastened to the wall.
  1652. 5056    Slot
  1653. 4001    Fat chance.
  1654. 5057    Vending machine
  1655. 4001    There is a vending machine here.
  1656. 4002    It looks exactly like the machines used on earth to dispense
  1657. 4002    newspapers. Inside is a supply of papers. The money slot is
  1658. 4002    labeled &25.
  1659. 4003    It is fastened to the wall.
  1660. 5058    Slot
  1661. 4001    Fat chance.
  1662. 5059    Vending machine
  1663. 4001    There is a vending machine here.
  1664. 4002    It is a slot machine. That is, it has a slot for any size 
  1665. 4002    coin and three windows through which can be seen images of 
  1666. 4002    various fruits and occasionally a pot of money. It does
  1667. 4002    seem to be missing the lever necessary to make it a 
  1668. 4002    "One armed bandit".
  1669. 4003    You think perhaps to take it to a quiet place and blow it
  1670. 4003    open? Sorry, it won't budge.
  1671. 5060    Slot
  1672. 4001    Fat chance
  1673. 5061    Vending machine
  1674. 4001    There is a vending machine here.
  1675. 4002    It appears to be offering maps for sale. A slot in it is 
  1676. 4002    marked &75.
  1677. 4003    It is attached to the wall.
  1678. 5062    Slot
  1679. 4001    Fat chance.
  1680. 5063    Large machine
  1681. 4001    Read the room description for information.
  1682. 4002    It is too heavy
  1683. 5064    Orange door
  1684. 4001    The orange door is shut.
  1685. 4002    The orange door is open.
  1686. 4003    Silly!
  1687. 5065    Pink door
  1688. 4001    The pink door is shut.
  1689. 4002    Fat chance!
  1690. 5066    Blue door
  1691. 4001    The blue door is shut.
  1692. 4002    The blue door is open.
  1693. 4003    It's fixed top the ship.
  1694. 5067    Orange clip
  1695. 4001    The orange clip is empty.
  1696. 4002    The orange clip contains:
  1697. 4003    No way.
  1698. 5068    Violet clip
  1699. 4001    The violet clip is empty.
  1700. 4002    The violet clip holds:
  1701. 4003    Silly!
  1702. 5069    Yellow clip
  1703. 4001    The yellow clip is empty.
  1704. 4002    The yellow clip contains:
  1705. 4003    Not in this life!
  1706. 5070    Blue clip
  1707. 4001    The blue clip is empty.
  1708. 4002    The blue clip holds:
  1709. 4003    You break your fingernail but not the clip.
  1710. 5071    File cabinet
  1711. 4001    The file cabinet holds useless papers.
  1712. 4002    In addition to junk the cabinet holds:
  1713. 4003    It is glued to the floor.
  1714. 5072    Green button
  1715. 4001    Behind the file cabinets is a green button.
  1716. 4002    Silly!
  1717. 5073    Large mural
  1718. 4001    The south wall of the room is completely filled with a large
  1719. 4001    mural.
  1720. 4002    The mural has slid partially aside to reveal a secret passage
  1721. 4002    leading south.
  1722. 4003    The mural shows a picture of one of the large star clusters
  1723. 4003    visible out the viewing ports. You notice that the left side
  1724. 4003    is somewhat scuffed up.
  1725. 4004    You might as well take the air.
  1726. 5074    Dummy
  1727. 4001    ****
  1728. 5075    ****
  1729. 9999
  1730. SHAR_EOF
  1731. #    End of shell archive
  1732. exit 0
  1733. -- 
  1734. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  1735. Have five nice days.
  1736.